// Copyright 2011 Jefferson Willian
// willmont7@gmail.com

#include <cstdio>

#define INF 1000000

#define MAX 1000

int left[MAX][MAX];   // Melhor resultado pela esquerda da coordenada [][]
int right[MAX][MAX];  // Melhor resultado pela direita da coordenada [][]
int up[MAX][MAX];     // Melhor resultado por cima da coordenada [][]
int n, m;

int max(int a, int b, int c) {
  a = a > b? a:b;
  a = a > c? a:c;

  return a;
}

int main() {
  int matriz[MAX][MAX];
  int games = 1;

  while (scanf("%d%d", &n, &m) && n != 0 || m != 0) {
    for (int i = 0;i < n;i++)
      for (int j = 0;j < m;j++) {
        scanf("%d", &matriz[i][j]);
        left[i][j] = -1;
        right[i][j] = -1;
        up[i][j] = -1;
      }

    /* Coloca restricoes */
    for (int i = 0;i < n;i++) {
      left[i][0] = -INF;
      right[i][m-1] = -INF;
    }

    /* Coloca restricoes */
    for (int i = 0;i < m;i++) {
      up[0][i] = -INF;
      right[0][i] = -INF;
      right[n-1][i] = -INF;
    }

    left[0][0] = matriz[0][0];

    /* Resolve o problema */
    for (int i = 0;i < n;i++) {
      /* Melhor movimento vindo de cima */
      for (int j = 0;j < m;j++) {
        if (up[i][j] == -INF)
          continue;
        up[i][j] = max(left[i-1][j], right[i-1][j], up[i-1][j])+matriz[i][j];
      }
      /* Melhor movimento vindo da esquerda */
      /* Detalhe: eh proibido pega um melhor movimento vindo da direita */
      for (int j = 0;j < m;j++) {
        if (left[i][j] == -INF)
          continue;
        left[i][j] = max(left[i][j-1], up[i][j-1], -INF)+matriz[i][j];
      }
      /* Melhor movimento vindo da direita */
      /* Detalhe: eh proibido pega um melhor movimento vindo da esquerda */
      for (int j = m-1;j >= 0;j--) {
        if (right[i][j] == -INF)
          continue;
        right[i][j] = max(-INF, up[i][j+1], right[i][j+1])+matriz[i][j];
      }
    }

    /* Imprime o melhor resultado */
    printf("Teste %d\n%d\n\n", games++, max(left[n-1][m-1], right[n-1][m-1], up[n-1][m-1]));
  }

  return 0;
}
